﻿using CREAPA.Dominio;
using CREAPA.Repositorio;
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CREAPA.RepositorioADO
{
    public class InspetoriaRepositorioADO
    {
        private Contexto contexto;

        private void Inserir(Inspetoria inspetoria)
        {
            var strQuery = "";
            strQuery += " INSERT INTO Inspetoria (Nome)";
            strQuery += string.Format(" values ('{0}')", inspetoria.Nome);
            using (contexto = new Contexto())
            {
                contexto.ExecutaComando(strQuery);
            }
        }
        private void Alterar(Inspetoria inspetoria)
        {
            var strQuery = "";
            strQuery += "UPDATE Inspetoria SET ";
            strQuery += string.Format(" Nome='{0}' ", inspetoria.Nome);
            strQuery += string.Format(" WHERE Id={0} ", inspetoria.Id);
            using (contexto = new Contexto())
            {
                contexto.ExecutaComando(strQuery);
            }
        }

        public void Salvar(Inspetoria inspetoria)
        {
            if (inspetoria.Id > 0)
            {
                Alterar(inspetoria);
            }
            else
            {
                Inserir(inspetoria);
            }
        }

        public void Excluir(int id)
        {
            using (contexto = new Contexto())
            {
                var strQuery = string.Format(" DELETE FROM Inspetoria WHERE Id = {0}", id);
                contexto.ExecutaComando(strQuery);
            }
        }

        public Inspetoria ListarPorId(int Id)
        {
            using (contexto = new Contexto())
            {
                var strQuery = String.Format(" SELECT * FROM Inspetoria WHERE Id = {0}", Id);
                var retornoDataReader = contexto.ExecutaComandoComRetorno(strQuery);
                return TransformaReaderEmListaDeObjeto(retornoDataReader).FirstOrDefault();
            }
        }

        public IEnumerable<Inspetoria> ListarInspetoria()
        {
            using (contexto = new Contexto())
            {
                var strQuery = String.Format(" Select * from Inspetoria order by Nome");
                var retornoDataReader = contexto.ExecutaComandoComRetorno(strQuery);
                return TransformaReaderEmListaDeObjeto(retornoDataReader);
            }
        }

        private List<Inspetoria> TransformaReaderEmListaDeObjeto(SqlDataReader reader)
        {

            var inspetoria = new List<Inspetoria>();
            while (reader.Read())
            {
                var TemObjeto = new Inspetoria()
                {
                    Id = int.Parse(reader["Id"].ToString()),
                    Nome = reader["Nome"].ToString()
                };
                inspetoria.Add(TemObjeto);
            }
            reader.Close();
            return inspetoria;
        }
    }
}
